/**
  ******************************************************************************
  * @file    main.c
  * @author  AE Team
  * @version 1.0.3
  * @date    2024-05-28
  * @brief   本样例演示专用固件区读保护功能：创建专用固件保护区并实现相应API
  *          下载该样例会将Slib库以及"0xFFF0 ~ 0xFFFF"位置的特定控制字一起写入FLASH
  *          创建专用固件保护区操作步骤如下：
  *          1. 填写Slib.c中的SlibKeys、StartIdx、EndIdx用户参数
  *          2. 软件仿真进入本样例main函数计算得到CRC结果（也可通过其他方式计算）
  *          3. 将步骤2得到的CRC结果写入Slib.c中的CRCL和CRCH
  *          4. 重新编译得到最终的可执行文件
  *          5. 烧录到MCU后重新上下电或按Reset以使SLIB功能生效
  *
  * @note    硬件平台：SYM32L010_StartKit_V1.0
  *          接线说明：短接J28
  *          使用说明：main函数起到辅助作用，其通过 CRC外设 计算CRC16_X25
  *                    若用户需要计算CRC16_X25，可通过调试查看CRC_RESULT寄存器
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2024 SIYIMicro.
  * All rights reserved.</center></h2>
  *
  *
  ******************************************************************************
  */


/******************************************************************************/
/* Include files                                                              */
/******************************************************************************/
#include "main.h"
#include "sym32l010_hal_systick.h"
#include "sym32l010_hal_sysctrl.h"
#include "sym32l010_hal_crc.h"
#include "Slib.h"


/******************************************************************************/
/* Local pre-processor symbols/macros ('#define')                             */
/******************************************************************************/

/******************************************************************************/
/* Global variable definitions (declared in header file with 'extern')        */
/******************************************************************************/
extern const uint8_t     Slib_Record[];

/******************************************************************************/
/* Local type definitions ('typedef')                                         */
/******************************************************************************/

/******************************************************************************/
/* Local function prototypes ('static')                                       */
/******************************************************************************/

/******************************************************************************/
/* Local variable definitions ('static')                                      */
/******************************************************************************/

/******************************************************************************/
/* Local pre-processor symbols/macros ('#define')                             */
/******************************************************************************/

/******************************************************************************/
/* Function implementation - global ('extern') and local ('static')           */
/******************************************************************************/

/*******************************************************************************
 ** \brief  Main function of project
 **
 ** \return uint32_t return value, if needed
 **
 **
 ******************************************************************************/
int32_t main(void)
{
    SYM_SYSCTRL->AHBEN  = SYSCTRL_CR_KEY | 0xFFFF;
    SYM_SYSCTRL->APBEN1 = SYSCTRL_CR_KEY | 0xFFFF;
    SYM_SYSCTRL->APBEN2 = SYSCTRL_CR_KEY | 0xFFFF;

    // 请在仿真模式下查看SYM_CRC->RESULT16的值，
    // 然后将该值写到Slib.c文件中的CRCL和CRCH，注意高位为高字节，低位为低字节
    SYM_CRC->CR = 0x06;                                               // CRC16_X25
    for (uint32_t i=0; i<14; i++)
    {
        SYM_CRC->DR = Slib_Record[i];
    }

    SlibApi_Led_Blink();
}

/*******************************************************************************
 ** EOF (not truncated)
 ******************************************************************************/
#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
    /* USER CODE BEGIN */
    /* User can add his own implementation to report the file name and line number,
       tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
    /* USER CODE END */
}
#endif /* USE_FULL_ASSERT */


/************************ (C) COPYRIGHT SIYIMicro *****END OF FILE*************/
